package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ModelConfig;
import com.zenithmind.chat.pojo.query.ModelConfigQuery;
import com.zenithmind.common.result.PageResult;

import java.util.List;

/**
 * AI模型配置服务接口
 */
public interface ModelConfigService extends IService<ModelConfig> {
    
    /**
     * 获取所有可用模型
     * @return 模型列表
     */
    List<ModelConfig> getAllModels();
    
    /**
     * 获取所有启用的模型配置
     * @return 模型配置列表
     */
    List<ModelConfig> getAllEnabledModels();
    
    /**
     * 获取指定类型的模型
     * @param modelType 模型类型
     * @return 模型列表
     */
    List<ModelConfig> getModelsByType(Integer modelType);
    
    /**
     * 获取指定类型的所有启用模型配置
     * @param modelType 模型类型
     * @return 模型配置列表
     */
    List<ModelConfig> getEnabledModelsByType(Integer modelType);
    
    /**
     * 分页获取模型配置
     * @param query 查询参数
     * @return 分页数据
     */
    PageResult<ModelConfig> getModelPage(ModelConfigQuery query);
    
    /**
     * 根据ID获取模型配置详情
     * @param id 配置ID
     * @return 模型配置
     */
    ModelConfig getConfigById(Long id);
    
    /**
     * 添加模型配置
     * @param modelConfig 模型配置
     * @return 是否成功
     */
    boolean addModel(ModelConfig modelConfig);
    
    /**
     * 更新模型配置
     * @param modelConfig 模型配置
     * @return 是否成功
     */
    boolean updateModel(ModelConfig modelConfig);
    
    /**
     * 保存或更新模型配置
     * @param modelConfig 模型配置
     * @return 是否成功
     */
    boolean saveOrUpdateConfig(ModelConfig modelConfig);
    
    /**
     * 删除模型配置
     * @param id 模型ID
     * @return 是否成功
     */
    boolean deleteModel(Long id);
    
    /**
     * 删除模型配置
     * @param id 配置ID
     * @return 是否成功
     */
    boolean deleteConfig(Long id);
    
    /**
     * 启用/禁用模型
     * @param id 模型ID
     * @param enabled 是否启用
     * @return 是否成功
     */
    boolean toggleModelStatus(Long id, Integer enabled);
    
    /**
     * 更新模型启用状态
     * @param id 配置ID
     * @param enabled 启用状态
     * @return 更新结果
     */
    boolean updateModelStatus(Long id, Integer enabled);

    /**
     * 批量删除模型配置
     * @param ids 配置ID列表
     * @return 是否成功
     */
    boolean deleteBatch(List<Long> ids);

    /**
     * 批量新增或更新模型配置
     * @param modelConfigs 模型配置列表
     * @return 是否成功
     */
    boolean saveOrUpdateBatchConfig(List<ModelConfig> modelConfigs);
} 